// ajax, php 간에 통신시 사용되는 규칙
var mesg = new Object();
mesg.success = "100";
mesg.failure = "300";

// wyswig 관련
var opts = {
		cssClass : 'el-rte',
		height   : 250,
		lang : 'ko',
		toolbar  : 'complete',
		cssfiles : ['/css/elrte-inner.css']
}


var dialog_form_name = "ajaxLoadForm";
var dialog_form_content_name = "ajaxLoadFormContent";

/**
 * dialog를 사용될때 사용되는 폼을 리턴합니다. (Object형식임)
 * .mainForm		: dialog 외곽
 * .contentForm 	: 실제 content내용이 들어갈 부분
 * 
 * @param fname
 * @return
 */
function ajaxLoadForm(fname) {
	form_name = dialog_form_name + fname;
	content_form_name = dialog_form_content_name + fname;
	
	var dialogForm = new Object();
	
	dialogForm.mainForm = $("#"+form_name);
	dialogForm.contentForm = $("#"+content_form_name);
	
	// 기존에 이미 dialog를 실행 시켰을 경우 예외처리
	// 메인폼이 존재하지않으면 content_form도없다는 가정하에 진행.
	if(dialogForm.mainForm.length < 1) {
		bodys= $("body").eq(0);
		dialogForm.mainForm = $("<div id='"+form_name+"' />");
		dialogForm.mainForm.appendTo(bodys);
		
		dialogForm.contentForm = $("<div id='"+content_form_name+"' />");
		dialogForm.contentForm.appendTo(dialogForm.mainForm);
	}
	
	return dialogForm;
}

/**
 * 동적 컨텐츠 load 후 dialog 사용
 * 
 * 제대로 찾아보지는 않았지만 POST형식은 지원하지 않는거 같습니다.
 * @param url : 호출할 페이지
 * @param param : 파라메터
 * @param title : dialog title 영역에 표시될 문자열
 * @param width : 가로 사이즈
 * @param height : 세로 사이즈
 * @param callback : 페이지 호출후 실행할 함수
 * @param fname : 다이얼로그창을 여러개 띄울때 사용되는 고유한값.
 */
function ajaxLoad(url, param, callback, fname) {
	// callback함수를 따로 구현 하실때는 
	// validation에서 표시되는 경고 문구를 닫는 함수를 넣어주셔야 합니다. 
	if(isNullOrEmpty(fname)) fname = "";
	
	var dialogForm = ajaxLoadForm(fname); 
	
	dialogForm.contentForm.load(url, param, callback);
	
	return dialogForm;
}


/**
 * 기본 Dialog 창
 * @param url
 * @param param
 * @param title
 * @param width
 * @param height
 * @param callback
 * @param fname
 */
function ajaxLoadDialog(url, param, title, width, height, callback, fname) {
	
	var dialogForm = ajaxLoad(url, param, callback, fname);
	
	dialogForm.mainForm.dialog({
		resizable	:false,
		width		: width,
		minWidth 	: width,
		height 		: height,
		title 		: title,
		modal		: true
	});
}



function ajaxLoadDialogForm(url, param, title, width, height, callback, fname) {
	
	if(!callback) {
		callback = function() {
			// 폼 정보 가져오기
			dialogForm = ajaxLoadForm(fname);
			
			// 해당 폼을 dialog로 띄우기.
			dialogForm.mainForm.dialog({
				resizable	: false,
				modal		: true,
				width		: width,
				minWidth	: width,
				height		: height,
				show		: {effect : "slide", direction:'down'},
				hide		: {effect : "slide", direction:'down'},
				title 		: title
			});
		}
	}
	
	var dialogForm = ajaxLoad(url, param, callback, fname);
}


function _loadDialogFormName(fname) {
	var dialogid = dialog_form_name + fname;
	
	var dialogform = $("#"+dialogid);
	if(!dialogform.length) {
		dialogform = $("<div id="+dialogid+"/>");
	}
	
	return dialogform;
}



function loadDialogForm(url, param, title, width, height, callback, fname) {
	var dialogform = _loadDialogFormName(fname);
		
	dialogform.load(url, param).dialog({
		resizable	: false,
		modal		: true,
		width		: width,
		minWidth	: width,
		height		: height,
		show		: {effect : "slide", direction:'down'},
		hide		: {effect : "slide", direction:'down'},
		title 		: title,
		beforeClose: function() {
			// tinyMCE 때문에 추가 작업함.
			if ((tinyMCE != undefined) && (tinyMCE.activeEditor != undefined)) {
				tinyMCE.activeEditor.remove();
			}
		}
	});
	
	// overlay 클릭하면 창 닫히게 해야됨.
	$('.ui-widget-overlay').click(function(){
		if(dialogform.dialog('isOpen')) {
			dialogform.dialog('close');
		}
	});
}


/**
 * 우측 상단에서 사용되는 login dialog.
 * 
 * @param url
 * @param param
 * @param position
 */
function loadDialogLogin(url, param, position) {
	
	var dialogform = _loadDialogFormName("login");
		
	var top = position.top + 30;
	var left = position.left - 270;
	
	dialogform.load(url, param).dialog({
		resizable:false,
		position:[left, top],
		show : "blind",
		hide : 'blind',
		modal : true,
		title : "로그인"
	});
	
	
	// overlay 클릭하면 창 닫히게 해야됨.
	$('.ui-widget-overlay').click(function(){
		if(dialogform.dialog('isOpen')) {
			dialogform.dialog('close');
		}
	});
}



/**
 * 페이지 이동
 * @param href
 * @param replace
 */
function move(href, replace) {
	if(replace)
		location.replace(href);
	else 
		location.href=href;
}

/**
 * history.back
 */
function back() {
	history.back(-1);
}

/**
 * confirm후 페이지를 이동 시킵니다.
 * 
 * @param msg
 * @param href
 * @returns {Boolean}
 */
function confirm_move(msg, href) {
	if(confirm(msg))
		location.href = href;
	else return false;
}


/**
 * 전달된 값이 빈값인지 체크
 * @param {Object} value
 * @return {Boolean} 
 */
function isNullOrEmpty(value)
{
	if(value == null || $.trim(value) == "")
		return true;
	else
		return false;
}

/** jquery setting **/
$(function() {
	$.ajaxSetup({
		 type:"POST"
		//,contentType:"application/json; charset=utf-8"
		,error:function(xhr, msg) {
			alert(msg + '\n' + xhr.responseText);
	    }
	});
	
	// loading 이미지
	$(document).ajaxStart(function () { showProgress() }).ajaxStop(function () { hideProgress() });
	
	function showProgress() {
		$('body').append('<div id="ajax_loading"><div id="ajax_loading_img">Loading...</div></div>');
	    $('#ajax_loading').css({height:$(document).height()});
	    $('#ajax_loading_img').center();
	}
	function hideProgress() {
	    $('#ajax_loading').remove();
	}
	
	$.fn.center = function () {
		$(this).css({
		    "position": "absolute",
		    "top": ( $(window).scrollTop() + ($(window).height() - $(this).height())/2 ) + 'px',
		    "left":  ( $(window).scrollLeft() + ($(window).width() - $(this).width())/2 ) + 'px'
		});
		
	    return this;
	}
	
	
	sagapo.init();
	
	// 세로 크기 100% 고정 시키기..
	$(window).resize(function() { 
		sagapo.resize();		
	}); 
	
});


var aktimemce = {
		// Location of TinyMCE script
		script_url : '/js/tiny_mce/tiny_mce.js',
		
		// General options
		theme : "advanced",
		plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

		// Theme options
		theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect|,forecolor,backcolor",
		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup",
		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr",
		theme_advanced_buttons4 : "save,newdocument,|insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,code,preview|,fullscreen",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",

		// Drop lists for link/image/media/template dialogs
		template_external_list_url : "lists/template_list.js",
		external_link_list_url : "lists/link_list.js",
		external_image_list_url : "lists/image_list.js",
		media_external_list_url : "lists/media_list.js"
}

/**
 * jquery 확장 함수 
 * 사용법 : $.toJSON($("#form").serializeJson()); 
 */
$.fn.serializeJson = function() {
  var o = {};
  var a = this.serializeArray();
  $.each(a, function() {
      if (o[this.name]) {
          if (!o[this.name].push) {
              o[this.name] = [o[this.name]];
          }
          o[this.name].push(this.value || '');
      } else {
          o[this.name] = this.value || '';
      }
  });
  return o;
};


/**
 * input 관련된 함수 묶음.
 */
var inputFunction = new function() {
	this.allChecked = function(obj)
	{
		var checked = obj.checked;
		$("input[name='chk[]']").each(function() {
			// disabled된 항목은 선택이 되면 안됨.
			if(!$(this).is(":disabled")) {
				this.checked = checked;
			}
		});
	}
}

/**
 * 특별한 이유가 없다면 기본 메뉴를 제외한 사용자가 직접 추가한 메뉴는 sagapo.section 을 호출 해야됨.
 * 
 */
var sagapo = new function() {
	
	this.container = "container",
	this.left = "left",
	
	this.init = function() {
		sagapo.resize();
		
		// section .container .list  클릭시 열려있는 article 글 닫기. 
		sagapo.section_event_add();
	},
	
	this.section_class_change = function(classname) {
		// 클래스 모두 지우고 새로 클래스 이름 할당.
		$("#"+sagapo.container+" section.section").removeClass().addClass('section '+classname);
	},
	
	/**
	 * 좌측 메뉴 최소화
	 */
	this.section_icon = function(obj) {
		
		$("#"+sagapo.left).animate({
			width:48
		}, 500);
		
		// current 바꾸기
		$("#"+sagapo.left+" menu ul li").each(function() {
			if($(this).hasClass("current")) {
				$(this).removeClass("current");
				$(this).addClass("ui-bar-c");
			}
		});
		
		$(obj).parent().removeClass("ui-bar-c").addClass("current");
		
		// section .container .list 클릭시 열려있는 article 글 닫기.
		$("#"+sagapo.container+" .container").load($(obj).attr("href"), function() {
			sagapo.section_event_add();
		});
		
		
		return false;
	},
	
	/**
	 * 좌측 메뉴 원 상태로 변환
	 */
	this.section_original = function() {
		$("#"+sagapo.left).animate({
			width:200
		}, 500);
		
		return false;
	},
	
	this.section_refresh = function(href, article_close) {
		$("#"+sagapo.container+' .container').load(href, function() {
			sagapo.section_event_add();
		});
		
		if(article_close) {
			sagapo.article_close();
		}
		
		// 열려있는 dialog 모두 닫기
		sagapo.dialog_close();
	},
	
	/**
	 * 게시물 열기
	 */
	this.article = function(obj, callback, w) {
		
		// 해당 페이지 load
		$("section.section article.article .article_container").load($(obj).attr("href"), function() {
			sagapo.article_event_add();
		});
		
		// ul.list가 존재하면 클릭된 li a.article에 current 클래스 추가하기
		/*
		var ul_list = $("section.section .container .list_container ul.list");
		if($(ul_list).length > 0) {
			$(ul_list).find("a.article").each(function() {
				$(this).removeClass("current");
			});
			
			$(obj).addClass("current");
		}
		*/
		
		
		
		
		w = (!w) ? 350 : w;
		
		var article = $("#"+sagapo.container+" section.section article.article").get(0);
		
		if(!$(article).hasClass("show")) {
			$(article).addClass("show");
		}
		
		$("#"+sagapo.container+" section.section .container").animate({ width:w }, 'slow');
	},
	
	/**
	 * section .container .list 클릭시 열려있는 article 글 닫기.
	 */
	this.section_event_add = function() {
		var container = $("#"+sagapo.container+" section.section .container .list_container .list");
		if($(container).length > 0) {
			$(container).click(function() {
				sagapo.article_close();
			});
		}
		
		// 게시물 클릭시;
		$("section.section a.article").click(function() {
			sagapo.article($(this));
			return false;
		});
	},
	
	/**
	 * 게시물 닫기
	 */
	this.article_close = function() {
		$("#"+sagapo.container+" section.section .container").animate({ width:$('#container section.board').width() }, 'fast');
		$("#"+sagapo.container+" section.section article.article").removeClass("show");
		$("#"+sagapo.container+" section.section article.article .article_container").empty();
	},
	
	
	this.article_refresh = function(href) {
		
		$("#"+sagapo.container+" section.section article.article .article_container").load(href, function() {
			sagapo.article_event_add();
		});
		
		// 열려있는 dialog 모두 닫기
		sagapo.dialog_close();
	},
	
	
	this.article_event_add = function() {
		// 닫기
		$(".article_header button").click(function() {
			sagapo.article_close();
		});
		
		// 하단 영역 버튼들.
		$(".article_footer .refresh").click(function() {
			sagapo.article_refresh($(this).attr('href'));
			return false;
		});
	},
	
	/**
	 * jquery ui dialog로 열려있는 창 닫기
	 * 
	 * @param fname 
	 */
	this.dialog_close = function(fname) {
		
		if(!fname) {
			// 열려있는 dialog 모두 닫기
			$(".ui-dialog-content").each(function() {
				if($(this).dialog('isOpen')) {
					$(this).dialog('close');
				}
			});
		} else {
			var jquery_dialog = _loadDialogFormName(fname);
			if(jquery_dialog.dialog('isOpen')) {
				jquery_dialog.dialog('close');
			}
		}
	},
	/**
	 * 화면 변경시 body 크기 재 조정
	 */
	this.resize = function() {
		var height = $(window).height();
	    var header_height = $("header#header").height();
	    
	    $("#body").css({height:height-header_height+"px"});
	}
}